package GUI
{
	import DAL.Conexion;
	import DAL.LoginDAO;
	
	import MUNDO.*;
	
	import flash.display.TriangleCulling;
	import flash.events.*;
	import flash.text.TextField;
	import flash.text.TextFieldType;
	import flash.text.TextFormat;
	
	import playerio.*;
	
	import sample.ui.components.Component;
	public class Login
	{
		//Atributos
		private var _triviador:Triviador = null;							//Instancia de la clase triviador
		private var _nombre:TextField = new TextField();					//Nombre de Usuario
		private var _contrasenia:TextField = new TextField();				//Contraseña
		private var _ip:TextField = new TextField();						//IP
		private var _inicioButton:InicioButton = new InicioButton();		//Botón de Inicio de Sesión
		private var _asterisco1:TextField = new TextField();				//Asterisco de validación de Nombre de Usuario
		private var _asterisco2:TextField = new TextField();				//Asterisco de validación de Contraseña
		private var _asterisco3:TextField = new TextField();				//Asterisco de validación de IP
		private var _mensajeError:TextField = new TextField();				//Mensaje de error de validación
		private var _registrarButton:RegistrarseB = new RegistrarseB();     //Boton de registro


		
		//Constructor
		/**
		 * Constructor de la clase Login
		 * @param triviador 
		 */
		public function Login(triviador:Triviador)
		{
			_triviador = triviador;
		}
		
		//Métodos
		/**
		 * Función que muestra la escena donde se encuentra (gráficamente) el Login, incluyendo 
		 * algunos elementos gráficos faltantes.
		 * Además hace un llamado a la función ubicarElementosGaficos, la cual configura elementos visuales.
		 **/
		public function mostrarLogin():void
		{
			onOver(null);
			_contrasenia.addEventListener(KeyboardEvent.KEY_DOWN, onIntro);
			_ip.addEventListener(KeyboardEvent.KEY_DOWN, onIntro);
			_triviador.gotoAndStop(1,"Escena 1");
			ubicarElementosGaficos();
			_triviador.addChild(_nombre);
			_triviador.addChild(_contrasenia);
			_triviador.addChild(_ip);
			_triviador.addChild(_inicioButton);
			_triviador.addChild(_registrarButton);
			_inicioButton.addEventListener(MouseEvent.MOUSE_OVER, onOver);
			_inicioButton.addEventListener(MouseEvent.CLICK, onClick);
			_registrarButton.addEventListener(MouseEvent.CLICK, onClickRegistrarse);
		}
		
		/**
		 * Esta funcion se ejecuta al oprimir el boton de registrarse, creando un nuevo registro
		 * @param mouseEvent Evento que se genera al realizar el evento con el mouse
		 */		
		public function onClickRegistrarse( mouseEvent:MouseEvent):void
		{
			_triviador.removeChild(_nombre);
			_triviador.removeChild(_contrasenia);
			_triviador.removeChild(_ip);
			_triviador.removeChild(_inicioButton);
			_triviador.removeChild(_registrarButton);
			_triviador.gotoAndStop(1, "Escena 15");
			var nuevoRegistro:Registro = new Registro(_triviador);
			nuevoRegistro.mostrarRegistro();
		}
				
		/**
		 * Funcion que evalúa si el usuario ha presionado enter en el campo contraseña o ip, de ser asi
		 * realiza el inicio de sesión
		 * @param event Evento que se genera al presionar cualquier tecla
		 */
		public function onIntro(event:KeyboardEvent){
			if (event.keyCode == 13){
				onClick(null);
			}
		}
		
		/**
		 * Función que configura las propiedades de los elementos gráficos a mostrar en el Login.
		 **/
		public function ubicarElementosGaficos():void
		{
			//Construccion del campo para ingresar el nombre
			_nombre.type = TextFieldType.INPUT;
			_nombre.height = 32,20;
			_nombre.width = 213;
			_nombre.x = 297;
			_nombre.y = 113;
			_nombre.defaultTextFormat = Utils.formatearTitulos();
			_nombre.textColor = 0x040E1D;
			//Construccion del campo para ingresar la contraseña
			_contrasenia.type = TextFieldType.INPUT;
			_contrasenia.displayAsPassword = true;
			_contrasenia.height = 32,20;
			_contrasenia.width = 213;
			_contrasenia.x = 293;
			_contrasenia.y = 178;
			_contrasenia.defaultTextFormat = Utils.formatearTitulos();
			_contrasenia.textColor = 0x040E1D;
			//Construccion del campo para ingresar la IP
			_ip.type = TextFieldType.INPUT;
			_ip.height = 32,20;
			_ip.width = 213;
			_ip.x=298;
			_ip.y=244; 
			_ip.text = "localhost";	
			_ip.setTextFormat(Utils.formatearTitulos());
			_ip.textColor = 0x040E1D;
			//Construccion del boton de iniciar sesion
			_inicioButton.x = 262;
			_inicioButton.y = 264;
			//Construccion del boton de registrar
			_registrarButton.x = 292;
			_registrarButton.y = 319;
		}
		/**
		 * Esta funcion se ejecuta al pasar el puntero sobre el botón de iniciar sesion.
		 * Se realiza una conexión en modo Super Usuario.
		 * @param mouseEvent El evento que ha generado el usuario al dar click al boton enviar.
		 */
		public function onOver( mouseEvent:MouseEvent):void
		{
			
			Partida.ip = _ip.text;
			var conexion:Conexion = new Conexion(_triviador);
			conexion.conectarSU();
		}
		
		/**
		 * Esta funcion se ejecuta al oprimir el boton iniciar sesion. Se comprueba que se ha
		 * escrito un nombre de usuario con su contraseña y se establece conexion con el servidor.
		 * @param mouseEvent El evento que ha generado el usuario al dar click al boton enviar.
		 */
		public function onClick( mouseEvent:MouseEvent):void
		{ 
			var falta:Boolean = false;
			_asterisco1.text = "";
			_asterisco2.text = "";
			_asterisco3.text = "";
			_mensajeError.text = "";
			_mensajeError.width = 200;
			_mensajeError.height = 30;
			_triviador.addChild(_asterisco1);
			_triviador.addChild(_asterisco2);
			_triviador.addChild(_asterisco3);
			_triviador.addChild(_mensajeError);
			if (_nombre.text.length == 0){
				_asterisco1.x = 280;
				_asterisco1.y = 85;
				_asterisco1.width = 10;
				_asterisco1.text = "*";
				_asterisco1.setTextFormat(Utils.formatearErrores());
				_triviador.addChild(_asterisco1);
				falta = true;
			}
			if (_contrasenia.text.length == 0){
				_asterisco2.x = 280;
				_asterisco2.y = 150;
				_asterisco2.width = 10;
				_asterisco2.text = "*";
				_asterisco2.setTextFormat(Utils.formatearErrores());
				_triviador.addChild(_asterisco2);
				falta = true;
			}
			if (_ip.text.length == 0) {
				_asterisco3.x = 280;
				_asterisco3.y = 215;
				_asterisco3.width = 10;
				_asterisco3.text = "*";
				_asterisco3.setTextFormat(Utils.formatearErrores());
				_triviador.addChild(_asterisco3);
				falta = true;
			}
			if (falta) {
				_mensajeError.x = 328;
				_mensajeError.y = 70;
				_mensajeError.height = 20;
				_mensajeError.text = "* Campo Obligatorio.";
				_mensajeError.setTextFormat(Utils.formatearErrores());
				_triviador.addChild(_mensajeError);
			} else {
				trace("validacion correcta");
				Partida.ip =_ip.text;
				Partida.jugador = new Jugador(_nombre.text, _contrasenia.text, 0, 0, 0, 0);
				_triviador.removeChild(_mensajeError);
				_triviador.removeChild(_asterisco1);
				_triviador.removeChild(_asterisco2);
				_triviador.removeChild(_asterisco3);
				var loginDao:LoginDAO = new LoginDAO(_triviador);
				loginDao.ValidarIngreso(this, _nombre.text, _contrasenia.text);
			}
		}
		/**
		 * Funcion que muestra el mensaje de advertencia cuando un jugador no esta registrado en la BD
		 * @param tipo La función recibe el tipo que indica si el usuario no existe o ya ingreso o fue erronea la contraseña
		 */
		public function mensajeValidacionUsuario (tipo:int): void {
			_mensajeError.text = "";
			_mensajeError.x = 328;
			_mensajeError.y = 70;
			_mensajeError.height = 20;
			if(tipo==0){
				_mensajeError.text="<<Usuario no existe>>";
			} else if(tipo==1){
				_mensajeError.text="<<Usuario ya ingreso>>";
			} else if(tipo==2){
				_mensajeError.text="<<Contraseña Erronea>>";
			}
			_mensajeError.setTextFormat(Utils.formatearErrores());
			_mensajeError.x = 328;
			_mensajeError.y = 70;
			_mensajeError.height = 20;
			_triviador.addChild(_mensajeError);
		}
		
		/**
		 * Función que remueve los elementos gráficos (de clase) de la pantalla.
		 **/
		public function limpiarPantalla():void {
			_triviador.removeChild(_nombre);
			_triviador.removeChild(_contrasenia);
			_triviador.removeChild(_ip);
			_triviador.removeChild(_inicioButton);
			_triviador.removeChild(_registrarButton);
		}
	}
}